/* eslint-disable object-curly-newline,prefer-destructuring */
/*   按钮的业务功能   */
import * as commonFunc from '../../Common/commonFunc';
import * as comFunc from '../../Common/ComFunc';
import * as commonBusiness from '../business/commonBusiness';
import * as utils from '../../../utils/utils';

// ----------------------------新增行start---------------------------- //
/**   添加从表空行   */
export function handleAddSlaveRow(props) {
  /*   待用数据声明   */
  const { message, masterShowConfig, slaveShowConfig } = props;
  let { slaveData } = props;
  /*   添加空行默认值   */
  let addSlaveRow = fillAddRowDefaultValue(slaveShowConfig);
  /*   添加行的业务处理拿出去   */
  addSlaveRow = commonBusiness.doAddRowBusiness(
    addSlaveRow,
    { ...props },
    message,
  );
  /*   把新增行添加到从表数据中去并给state赋值   */
  if (utils.isNotEmptyObject(addSlaveRow)) {
    slaveData = addSlaveNewRow(addSlaveRow, slaveData);
    props.slaveData = slaveData;
    props.editTableRender = true;
  }
  /*   主从表showType都不用渲染   */
  props.isMasterRender = comFunc.setMasterRenderTrueOrFalse(masterShowConfig, false);
  props.isSlaveRender = comFunc.setSlaveRenderTrueOrFalse(slaveShowConfig, slaveData, false);
  /*   返回值   */
  return props;
}

/**   添加从表新增行   */
export function addSlaveNewRow(addSlaveRow, slaveData) {
  /*   添加从表数据(添加到合计的上一行位置)   */
  if (utils.isNotUndefined(slaveData)) {
    const len = slaveData.length;
    const index = len > 1 ? len - 1 : 1;
    slaveData.splice(index, 0, addSlaveRow);
  }
  /*   返回值   */
  return slaveData;
}

/**   填充新增行的默认值   */
export function fillAddRowDefaultValue(slaveShowConfig) {
  /*   待用数据声明   */
  const addSlaveRow = {};
  const sId = utils.createSid();
  /*   填充默认值(取配置中的默认值,否则为空)   */
  if (utils.isNotEmptyObject(slaveShowConfig)) {
    for (const each of slaveShowConfig) {
      addSlaveRow[each.sName] = commonFunc.listDefaultValueNewAdd(each, '');
    }
  }
  /*   固定值添加   */
  addSlaveRow.handleType = 'add';
  addSlaveRow.sId = sId;
  addSlaveRow.key = sId;
  /*   返回值   */
  return addSlaveRow;
}
// ----------------------------新增行end  ---------------------------- //

// ----------------------------删除行start---------------------------- //
/**   删除从表行   */
export function handleDelSlaveRow(props) {
  /*   待用数据声明   */
  const { selectedRowKeys, gdsformconst, message, masterShowConfig, slaveShowConfig, dataTotal } = props;
  let { slaveData, delData } = props;
  /**   处理是否有选中的删除项   */
  if (utils.isEmptyArr(selectedRowKeys)) { /*   无选中直接弹出提示   */
    handleDelSlaveRowNoSelect(gdsformconst, message);
    props.editTableRender = false;
  } else { /*   有选中则做相应的删除操作   */
    /*   执行删除后的数据并赋值   */
    const delObj = handleDelSlaveRowSelect(selectedRowKeys, slaveData, delData);
    slaveData = delObj.slaveData;
    delData = delObj.delData;
    /*   重新做合计   */
    props.slaveTotal = comFunc.addDataTotal(slaveShowConfig, dataTotal, slaveData, true);
    /*   返回值赋值   */
    props.slaveData = slaveData;
    props.delData = delData;
    props.selectedRowKeys = [];
    props.editTableRender = true;
  }
  /*   主从表showType都不用渲染   */
  props.isMasterRender = comFunc.setMasterRenderTrueOrFalse(masterShowConfig, false);
  props.isSlaveRender = comFunc.setSlaveRenderTrueOrFalse(slaveShowConfig, slaveData, false);
  /*   返回值   */
  return props;
}

/**   删除从表行(有选中)   */
export function handleDelSlaveRowSelect(selectedRowKeys, slaveData, delData) {
  /*   遍历选中的待删除行集合   */
  for (const sId of selectedRowKeys) {
    /*   看看删除集合和从表中是否都存在该条数据   */
    const slaveDataIndex = slaveData.findIndex(item => item.sId === sId);
    const delDataFilter = delData.filter(item => item.sId === sId);
    /*   删除从表中的数据并存入删除集合中   */
    if (slaveDataIndex >= 0) {
      const slaveDataFilter = slaveData[slaveDataIndex];
      slaveData.splice(slaveDataIndex, 1);
      /*   删除集合中存在就不用再存入了   */
      if (utils.isEmptyArr(delDataFilter)) {
        slaveDataFilter.handleType = 'del';
        delData.push(slaveDataFilter);
      }
    }
  }
  /*   返回值   */
  return {
    slaveData,
    delData,
  };
}

/**   删除从表行(无选中)   */
export function handleDelSlaveRowNoSelect(gdsformconst, message) {
  /*   警告信息   */
  let warn = '';
  /*   常量配置信息有值才给警告信息赋值   */
  if (utils.isNotEmptyArr(gdsformconst)) {
    /*   获取无选择行的提示配置对象   */
    const selectedRowKeysNo = gdsformconst.filter(item => (item.sName === 'selectedRowKeysNo'));
    /*   无选择行的提示配置对象不为空则把信息赋值给警告   */
    if (utils.isNotEmptyArr(selectedRowKeysNo)) {
      warn = selectedRowKeysNo[0].showName;
    }
  }
  /*   弹出警告信息   */
  message.warning(warn);
}
// ----------------------------删除行end  ---------------------------- //

// ----------------------------选择行start---------------------------- //
export function handleSelectRowChange(props) {
  /*   待用数据声明   */
  const { masterShowConfig, slaveShowConfig, slaveData } = props;
  /*   主从表showType都不用渲染   */
  props.isMasterRender = comFunc.setMasterRenderTrueOrFalse(masterShowConfig, false);
  props.isSlaveRender = comFunc.setSlaveRenderTrueOrFalse(slaveShowConfig, slaveData, false);
  /*   从表渲染   */
  props.editTableRender = true;
  /*   返回值   */
  return props;
}
// ----------------------------选择行end  ---------------------------- //
